
import { login ,getUserInfo,getUserDetailById} from '@/api/user'
import { getToken, setToken, removeToken ,setTimeStamp} from '@/utils/auth'
import {resetRouter} from '@/router'
const state = {
  token: getToken(), // 设置token初始状态   token持久化 => 放到缓存中
  userInfo: {}
}
const mutations = {
  // 设置token
  setToken(state, token) {
    state.token = token 
    setToken(token) // vuex和 缓存数据的同步
  },
  // 删除缓存
  removeToken(state) {
    state.token = null 
    removeToken() // 先清除 vuex  再清除缓存 vuex和 缓存数据的同步
  },
  // 设置用户信息
  setUserInfo(state, result) {
    state.userInfo = result
  },
  // 删除用户信息
  reomveUserInfo(state) {
    state.userInfo = {}
  }
}
// 执行异步
const actions = {
  async login(context, data) {
    const result = await login(data) // 实际上就是一个promise  result就是执行的结果
    // axios默认给数据加了一层data
    context.commit('setToken', result)
    setTimeStamp()
  },
  async getUserInfo (context) {
    const result = await getUserInfo()  // 获取返回值
    const baseInfo = await getUserDetailById(result.userId) // 为了获取头像
    const baseResult = { ...result, ...baseInfo } // 将两个接口结果合并
    // 此时已经获取到了用户的基本资料 迫不得已 为了头像再次调用一个接口
    context.commit('setUserInfo', baseResult) // 提交mutations
    return result // 这里为什么要返回 为后面埋下伏笔
  },
  logout(context){
    // console.log(111);
    context.commit('removeToken')
    context.commit('reomveUserInfo')
    // 重置路由
    resetRouter()
    // 父模块 调用 子模块的action
    context.commit('permission/setRoutes', [], { root: true })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
